package io.jt808.proto.cmd;

import io.norland.buffer.AutoBuffer;
import io.norland.annotations.Proto;
import io.norland.proto.IProto;
import lombok.Data;

import java.util.ArrayList;
import java.util.List;

/**
 * 信息点播菜单设置
 */
@Proto("8303")
@Data
public class JT8303 implements IProto {
    /**
     * 设置类型,0：删除终端全部信息项；  1：更新菜单；  2：追加菜单；  3：修改菜单
     */
    private byte settingType;
    /**
     * 信息项总数
     */
    private byte infoItemsCount;
    /**
     * 信息项列表
     */
    private List<OnDemandMessageItem> messages;

    public byte[] writeToBytes() {
        AutoBuffer bytes = new AutoBuffer();
        bytes.writeByte(settingType);
        bytes.writeByte(infoItemsCount);
        for (OnDemandMessageItem item : messages) {
            bytes.writeByte(item.messageType);
            bytes.writeShort(item.messageLength);
            bytes.writeGbkString(item.message, item.messageLength);
        }
        return bytes.array();
    }

    public void readFromBuf(AutoBuffer buff) {
        settingType = buff.readByte();
        infoItemsCount = buff.readByte();
        messages = new ArrayList<>();
        while (buff.isReadable()) {
            OnDemandMessageItem item = new OnDemandMessageItem();
            item.messageType = buff.readByte();
            item.messageLength = buff.readShort();
            item.message = buff.readGbkString();
            messages.add(item);
        }
    }

    public class OnDemandMessageItem {
        /**
         * 信息类型
         */
        private byte messageType;
        /**
         * 信息名称长度
         */
        private short messageLength;
        /**
         * 信息名称
         */
        private String message;
    }
//    public static void main(String[] args) {
//        byte[] bytes = new byte[]{
//                0x00,
//                0x01,
//                0x01,
//                0x00, 0x05,
//                (byte) 0xBA, (byte) 0xBD, (byte) 0xD4, (byte) 0xBA,
//                0x38
//        };
//        JT8303 jt8301 = new JT8303();
//        jt8301.readFromBuf(new AutoBuffer(bytes));
//        System.out.println(new String(bytes).equals(new String(jt8301.writeToBytes())));
//    }
}